package sensornetwork.sensor;

import snifc.sensor.IOPortsIfc;
import sensornetwork.Link;
import sensornetwork.sensor.Sensor;
import snifc.LinkIfc;
import snifc.PacketIfc;


public class IOPorts implements IOPortsIfc {
	
	private int compteur;
	private int maxTaille;
  private int idSensor;
	private Link [] tabLink;
  private Sensor parent;
  
	public IOPorts (Sensor p, int maxTaille) {
		this.maxTaille = maxTaille;
		this.tabLink = new Link [maxTaille];
		this.compteur = 0;
    this.parent = p;
    this.idSensor = p.getId();
	}
	
	public void addLink(LinkIfc l) throws Exception {
		if (compteur == maxTaille) {
			throw new Exception ("La taille max du LINK a ete atteinte pour le senseur : " + this.idSensor);
		} else {
			tabLink[compteur] = (Link) l;
			compteur ++;
      System.out.println("Ajout du lien "+l.getId()+" sur le sensor "+idSensor);
		}		
	}
	
	public void writePacket(PacketIfc p) {
		for (int i = 0; i< compteur; i++) {
			tabLink [i].transmit (p, (IOPortsIfc)this);	
		}		
	}
	
	public void getPackets() {
		for (int i = 0; i < this.compteur; i++) {
			PacketIfc packet = this.tabLink[i].getPendingPacket(this);
			if (packet != null) {
        //queue est en mode friendly (public au sein du package)
				parent.queue.enQueue(packet);
			}	
		}
	}
  
	public int compareTo(Object o){
		IOPorts p=(IOPorts)o;
		return (new Integer(this.idSensor).compareTo(new Integer(p.getIdSensor())));		
	}		
  
  public int getIdSensor(){
		return this.idSensor;
	}
}
